PowerQuery 相对路径解决方案 |
您所在的位置:网站首页 › power query文件夹动态路径 › PowerQuery 相对路径解决方案 |
本文讲解PowerQuery动态路径 几乎所有Power BI用户都知道,在Power BI Desktop里,如何从文件或文件夹获取数据, 但这里我提出一个你们不了解但也许会遇到的一个需求,如果文件或文件夹是相对路径而非绝对路径,要怎么办呢? 一个例子,报表需要从以下路径获取指定数据(假设我们不能使用Onedrive): C:\Users\\Documents且该报表需要分享给其他报表开发者进行二次开发,按照常规做法,我们会使用: File.Contents()来连接数据源,但该路径是静态的,当我们分享给同事后,报表应该从同事的文件夹中获取数据源,如果此时还需要同事手动修改路径,就会很麻烦,特别是当这样的数据源足够多的时候。因此,有没有办法可以使路径实现动态效果呢?无论我们分享给任何人,报表都可以自动地从对方的文件夹内获取指定数据。 事实上,该需求在Power BI官方社区早已有人提及,但截至目前却没有较好的解决办法, 因此我将在下文讲解该问题的解决方法,而且是多种解决办法。 方法一: 路径参数化以上文为例,如果不同的用户使得路径中username的部分不同,那么只需把AD域中,或者本机中的所有计算机用户名整理好,然后在新建参数时录入它们,比如命名为username, 那么就可以利用M语句新建一个自定义函数,其中路径部分为: File.Contents("C:\Users\" & username & "\Documents")在参数中输入任意用户名,比如Jack,然后Invoke,就可以拼凑出该用户的路径。
如果不想使用参数,并且不同的路径拥有相同的部分,就可以使用此方法。比如,针对于一个文件路径,它可能位于: C:\AAA\File\Project也可能位于: C:\BBB\File\Project也许你会想到完全可以使用方法一,通过使用户传参来确定路径,但此处我们C盘目录下的那个文件夹名称是不确定的,具有随机性和不规律性,或者说参数列表是手动难以维护的,此情况下,要如何做? 我们知道PowerQuery要做到像其他编程一样使用for循环遍历所有路径返回对应结果很麻烦,但我们可以使用Text.Contains函数,让该函数筛选出C盘所有包含"File\Project"路径的文件,如下: = Table.SelectRows(Source, each Text.Contains([Folder Path], "File\Project"))这样我们就可以获取所有相关列表,再进行下一步筛选,此时无论何人打开此报表,皆可以获取他们想要的数据。 其他此需求的另一种场景是获取某文件夹下最新的文件的数据。假设我们有一个文件夹,里面有命名不同的csv文件,我们需要取最近一次修改的csv文件,而不清楚哪个名称的csv文件是我们需要获取的,那么此时我们不能写出一个固定不变的绝对路径来,但我们可以使用Folder.Files函数获取路径下所有文件,然后再使用Table.FirstN把Date created或Date modified字段里日期最大的过滤出来,这样就能完美解决问题。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |